iT邦幫忙

1

1. 🔥Mojo 函式入門:def 讓你隨心所欲,fn 讓你滴水不漏!

  • 分享至 

  • xImage
  •  

function定義: def 與 fn

mojo 提供了兩種function定義的形式,讓使用者可以自由使用,一方面兼容python的語法,另一方面則借鑑Rust的規則

def

def 的行為就類似於 python的def
使用def時, 不用在宣告變數時標註型別
考慮以下程式,在名稱前後加上Hi驚嘆號。

def foo(word):
    word = "Hi, " + word
    result = word + "!"
    return result

def main():
    hello = foo("Hundo")
    print(hello)

其中name跟result都被解析成 object型別
https://ithelp.ithome.com.tw/upload/images/20241211/20170760TBoKlSvUqy.png
但其實也可以標註型別,標註起來就會像原本的python在進行type-annotation時一樣,只是對於函式內的變數要加上var

def foo(word: String) -> String:
    word = "Hi, " + word
    var result: String = word + "!"
    return result


def main():
    hello = foo("Hundo")
    print(hello)

word 跟 回傳都被標註成String了!
https://ithelp.ithome.com.tw/upload/images/20241211/20170760RvUnv89SoS.png

fn

現在考慮另一個function bar,將def 換成fn,對於調用方來說他們沒什麼差別,就是fn定義的函式變得更加嚴格了

fn bar(word: String) -> String:
    word = "Hi, " + word
    var result: String = word + "!"
    return result

會發現word不可以被改變, 這是因為fn的不可變特性, 確保了傳入的變數不會被意外改動
https://ithelp.ithome.com.tw/upload/images/20241211/201707606mjoZ0gv60.png
有幾種解法,其中一種是不要改動原本的變數

fn bar(word: String) -> String:
    var result: String = "Hi, " + word + "!"
    return result

另外一種則是加上mut關鍵字, 讓word可變

def main():
    var name: String = "Hundo"
    hello = bar(name)
    print(hello)
    print(name)
fn bar(mut word: String = "John") -> String:
    word = "Hi, " + word
    var result: String = word + "!"
    return result

這樣就是函式的基本概念了,其實只要稍微注意

特性 def fn
型別 可選標註 必需標註
可變性 可變 不可變

Mojo中的函式還有其他功能跟特性,後續的文章會再提到


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言